# -*- coding: latin-1 -*-
from django.db import models
from tjango.calculated.calculatedfields import *
from gestion.contactos.models import *
from tjango.autocomplete.autocompletefields import *
from django.db import connection
from itertools import *


js_calcular_pagado = u'''
	var a=0;
	var j = 0;
	for(j=0;j< parseInt($('#id_cheques-TOTAL_FORMS').val());j++)
	{
		if($('#id_cheques-'+j+'-importe').val()!="")
		{
			a +=parseFloat($('#id_cheques-'+j+'-importe').val());	
		}
		
	}
	if($('#id_efectivo').val()!='')
	{
		a =  parseFloat($('#id_efectivo').val()) + parseFloat(a) ;
	}
	$('#id_pagado').val(parseFloat(a));
	'''




class FormaDePago(models.Model):
	id = models.AutoField(primary_key=True,editable=False)
	efectivo = models.FloatField(blank=True,null=True)
	tipo = models.CharField(max_length=20,null=True,blank=True)
	#tarjetas, otras_monedas, depsitos, transferencias
	#ingresar un defaul value en los hijos!
	#ingreso = models.BoolField()
	pagado = CalculatedField(models.FloatField,source=['cheques.importe','efectivo'], js=js_calcular_pagado) 
	
	#problema de dependecia circular
	#que hacemo??
        def get_tipo(self):
          return FormaDePago
        def save(self):
          self.tipo = self.get_tipo()
          super(FormaDePago, self).save()
        
	def get_active_checks(self):
		for check in self.cheques.all(): 
			pass 
			
			
class Banco(models.Model):
	nombre = models.CharField(max_length=20)

	def __unicode__(self):
		return self.nombre


class Cheque(models.Model):
	banco = AutocompleteField(Banco, ['nombre'])
	numero = models.CharField("número",max_length=20)
	importe = models.FloatField()
	vencimiento = models.DateField(blank=True,null=True)
	a_pagar = models.ForeignKey(FormaDePago, blank=True, null=True) # este campo quedo para hacer la migracion al campo de ItemCheque
	
	def __unicode__(self):
		return self.numero
	
	def get_fecha(self):
		return "%s" % self.vencimiento.strftime("%d/%m/%Y")
	
	def de(self):
		try:
			ret = self.entregas.get(fecha_ingreso__isnull=False).de.nombre
		except:
			ret = ""
		return ret
	def para(self):
		try:
			ret = self.entregas.get(fecha_egreso__isnull=False).para.nombre
		except:
			ret = ""
		return ret
	def fecha_ingreso(self):
		try:
			ret = self.entregas.get(fecha_ingreso__isnull=False).fecha_ingreso
		except:
			ret = ""
		return ret
	def fecha_egreso(self):
		try:
			ret = self.entregas.get(fecha_egreso__isnull=False).fecha_egreso
		except:
			ret = ""
		return ret
	


			
					
class ItemCheque(models.Model):
	banco = AutocompleteField(Banco, ['nombre'])
	numero = models.CharField("número",max_length=20)
	cheque = ForeignKey(Cheque, related_name="entregas")
	importe = CalculatedField(source = ['numero','banco'],read_only=False,server = "Cheque.objects.get(numero=numero,banco=banco).importe", no_error=True)
	vencimiento = CalculatedField(source = ['numero','banco'],read_only=False,server = "Cheque.objects.get(numero=numero,banco=banco).get_fecha()", no_error=True,blank=True,null=True)
	a_pagar = models.ForeignKey(FormaDePago, related_name="cheques")
        de = models.ForeignKey(Contacto,null=True,blank=True,related_name="cheques_de")
        para = models.ForeignKey(Contacto,null=True,blank=True,related_name="cheques_para")
        fecha_ingreso =  models.DateField(null=True,blank=True)
        fecha_egreso =  models.DateField(null=True,blank=True)
	def save(self):
		try:
			self.cheque = Cheque.objects.get(numero=self.numero)
		except:
			self.cheque = Cheque(banco = self.banco,numero = self.numero,vencimiento=self.vencimiento, importe = self.importe)
			
			self.cheque.save()
               
                if self.a_pagar.pago.es_ingreso:
                  if self.a_pagar.tipo == "Venta":
                    self.de = self.a_pagar.pago.venta.cliente
		  if self.a_pagar.tipo == "IngresosVarios":
                    self.de = self.a_pagar.pago.ingresosvarios.contacto
                  if self.a_pagar.tipo == "Recibo_de_cobro":
                    self.de = self.a_pagar.pago.recibo.recibo_de_cobro.contacto
                  self.fecha_ingreso = self.a_pagar.pago.fecha
                if not self.a_pagar.pago.es_ingreso:
                  if self.a_pagar.tipo == "Compra":
                    self.para = self.a_pagar.pago.compra.proveedor
		  if self.a_pagar.tipo == "GastosVarios":
                    self.para = self.a_pagar.pago.gastosvarios.contacto
                  if self.a_pagar.tipo == "Recibo_de_pago":
                    self.para = self.a_pagar.pago.recibo.recibo_de_pago.contacto
                  self.fecha_egreso = self.a_pagar.pago.fecha
                self.cheque_id = self.cheque.id
		super(ItemCheque, self).save()





		
